1
Код как данные: гомоиконная природа Эликсира
AI019Lesson 10
00:00

Природа гомоиконности

Гомоиконный язык: Язык, в котором внутреннее представление выражается непосредственно в самом языке. В Эликсире исходный код — это не просто текст; это вложенная структура данных, известная как абстрактное синтаксическое дерево (АСД).

1. Правила логического представления

Эликсир упрощает АСД, представляя базовые литералы как самих себя. Атомы, числа, списки (включая ключевые списки), бинарные строки и кортежи из двух элементов представляются внутренне без сложного обертывания.

iex> quote do: [do: 1]
[do: 1]
iex> quote do: "binaries"
"binaries"

2. Структура кортежа АСД

Большинство преобразований кода приводят к трёхэлементному кортежу: {имя_функции, метаданные, аргументы}. Например, вызов функции, такой как 1 + 2 становится {:+, [line: 1], [1, 2]}. Это позволяет языку рассматривать код как данные.

3. Макросы: отложенное выполнение

Макросы — это «способ отложить выполнение фрагментов кода, вставляя код обратно во внутреннее представление нашей программы». В то время как обычные функции вычисляют аргументы до вызова, макросы получают исходный АСД, что позволяет внедрять логику до компиляции.

$$\text{Исходный код} \xrightarrow{\text{Quote}} \text{Кортеж АСД} \xrightarrow{\text{Макрос}} \text{Преобразованный АСД}$$

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>